package com.rzjm.exercise.common.utils;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;

import com.rzjm.exercise.common.exception.InternalException;
import org.springframework.lang.Nullable;

/**
 * @author bootdo
 */
public class StringUtils extends org.apache.commons.lang3.StringUtils {
	public static boolean hasLength(@Nullable String str) {
		return (str != null && !str.isEmpty());
	}
	
	public static boolean hasLength(@Nullable String[] strs) {
		return (strs != null && strs.length > 0);
	}
	
	
	/**
	 * 分割并获取制定索引的字符串
	 */
	public static String splitGet(final String str, final String separatorChars, final int index) {
		String[] strs = split(str, separatorChars);
		return hasLength(strs) ? (str.length() > index ? strs[index] : null) : null;
	}

	/**
	 *   把 List 转换成 字符串
	 * @param list
	 * @param separator
	 * @return
	 */
	public static String listToString(List list, char separator) {
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < list.size(); i++) {
			sb.append(list.get(i)).append(separator);
		}
		return list.isEmpty() ? "" : sb.toString().substring(0, sb.toString().length() - 1);
	}


	public static String getSplitStr(String str){
		if(!str.equals("")){
			str = str.substring(0,str.length() - 1);
		}
		return str;
	}
	
	/**
	 * 字符串转换为URL编译格式的字符串
	 */
	public static final String encodeURL(final String target) {
		if (StringUtils.isBlank(target)) {
			return "";
		}
		
		try {
			return URLEncoder.encode(target, "UTF-8");
		} catch (UnsupportedEncodingException uee) {
			throw new InternalException(uee);
		}
	}


	/**
	 * 判断是否当前商品 使用了 skutype
	 * @param skuTypeId
	 * @param sku_type_ids
	 * @return
	 */
	public static boolean isHasThisSkuType(int skuTypeId, String sku_type_ids){
		boolean bl = false;
		if(sku_type_ids!=null && !sku_type_ids.equals("")){
			String[] ids = new String[0];
			if(sku_type_ids.contains(",")){
				ids = sku_type_ids.split(",");
			} else {
				ids = new String[1];
				ids[0] = sku_type_ids;
			}
			for(String id : ids){
				if(skuTypeId == Integer.parseInt(id)){
					return  true;
				}
			}
		}else{
			return  false;
		}
		return bl;
	}

	/**
	 * 删除开始的一部分{@link String}，如果有的话
	 * 
	 * @param target
	 *            目标{@link String}
	 * @param remove
	 *            要删除的{@link String}
	 * @return 删除完后{@link String}
	 */
	public static final String removeStart(final String target,
			final String remove) {
		if (isEmpty(target) || isEmpty(remove)) {
			return target;
		}

		if (target.startsWith(remove)) {
			return target.substring(remove.length());
		}

		return target;
	}
	/**
	 * * 判断一个对象是否非空
	 *
	 * @param object Object
	 * @return true：非空 false：空
	 */
	public static boolean isNotNull(Object object)
	{
		return !isNull(object);
	}
	/**
	 * 获取参数不为空值
	 *
	 * @param value defaultValue 要判断的value
	 * @return value 返回值
	 */
	public static <T> T nvl(T value, T defaultValue)
	{
		return value != null ? value : defaultValue;
	}

	/**
	 * * 判断一个对象是否为空
	 *
	 * @param object Object
	 * @return true：为空 false：非空
	 */
	public static boolean isNull(Object object)
	{
		return object == null;
	}

	/**
	 * 删除结尾的一部分{@link String}，如果有的话
	 * 
	 * @param target
	 *            目标{@link String}
	 * @param remove
	 *            要删除的{@link String}
	 * @return 删除完后{@link String}
	 */
	public static final String removeEnd(final String target,
			final String remove) {
		if (isEmpty(target) || isEmpty(remove)) {
			return target;
		}

		if (target.endsWith(remove)) {
			return target.substring(0, target.length() - remove.length());
		}

		return target;
	}
}
